/*
 * JSFConsole - Lightweight JSF Application Monitor
 * Copyright (C) 2009  Grzegorz Bugaj
 * http://www.gregbugaj.com
 * 
 * This library is free software; you can redistribute it and/or
 * modify it under the terms of the GNU Lesser General Public
 * License as published by the Free Software Foundation; either
 * version 2.1 of the License, or (at your option) any later version.
 * 
 * This library is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 * Lesser General Public License for more details.
 * 
 * You should have received a copy of the GNU Lesser General Public
 * License along with this library; if not, write to the Free Software
 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
*/
package com.gregbugaj.jsfconsole.converters;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * Hold all the registered converters
 * @author devil
 *
 */
public class ConverterRegistry {
	public  List<Converter> converters;
	private Map<Class<?>, Converter> converterCache;
	
	
	public ConverterRegistry() {
		converters=new ArrayList<Converter>();
		converterCache=new HashMap<Class<?>, Converter>();
	}

	/**
	 * Add new converter
	 * @param converter to add
	 */
	public void register(Converter converter) {
		converters.add(converter);		
	}

	/**
	 * Lookup existing converter if nothing found return default converter
	 * @param type
	 */
	public Converter lookup(Class<?> type) {
		Converter cachedConverter=converterCache.get(type);
		if(cachedConverter!=null){
			return cachedConverter;
		}
		for(Converter con:converters){
			if(con.canConvert(type)){
				converterCache.put(type, con);
				return con;
			}			
		}
		return new DefaultConverter();
	}
}
